import {getSetting,chooseAddress,openSetting,showModel,showToast} from "../../utils/asyncWx.js"
import { request } from "../../request/index"
import regeneratorRuntime from '../../lib/runtime/runtime';

Page({

  /**
   * 页面的初始数据
   */
  data: {
    address: {},
    cart: [],
    allChecked: false,
    totalPrice: 0,
    totalNum: 0
  },
  onShow() {
    // 获取缓存中的收货地址信息
    const address = wx.getStorageSync('address');
    // 获取缓存中的购物车数据
    const cart = wx.getStorageSync('cart')||[];
    this.setData({
      address
    })
    this.setCart(cart);
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  // 点击 选择 收货地址
  async handleChooseAddress() {
    try {
      // 获取权限状态
      const res1 = await getSetting();
      const scopeAddress = res1.authSetting["scope.address"];
      // console.log(scopeAddress); 怎么一直都是true
      // 判断权限状态
      if(scopeAddress===false){
        // 先诱导用户打开授权界面
        await openSetting();
      }
      // 调用获取收获地址api
      const address = await chooseAddress();
      address.all = address.provinceName+address.cityName+address.countyName+address.detailInfo;
      // 存入缓存中
      wx.setStorageSync('address', address);
    } catch (error) {
      console.log(error);
    }
    
  },
  // 商品的选中
  handleItemChange(e){
    // 获取被修改的商品id
    const goods_id = e.currentTarget.dataset.id;
    // 获取购物车数组
    let {cart} = this.data;
    // 找到被修改的商品对象
    let index = cart.findIndex(v=>v.goods_id===goods_id);
    // 选中状态取反
    cart[index].checked = !cart[index].checked;
    
    this.setCart(cart);
  },
  // 设置购物车状态同时计算底部工具栏数据 全选 总价格 购买的数量
  setCart(cart) {
    // 计算全选 回调函数中每一个都返回为true every方法返回值为true
    // const allChecked = cart.length? cart.every(v=>v.checked):false;
    let allChecked = true;
    // 总价格 总数量
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(v=>{
      if(v.checked){
        totalPrice+=v.num*v.goods_price;
        totalNum+=v.num;
      }else {
        allChecked=false;
      }
    })
    // 判断数组是否为空
    allChecked = cart.length!=0?allChecked:false;
    // 给data赋值
    this.setData({
      cart,
      allChecked,
      totalPrice,
      totalNum
    });
    wx.setStorageSync('cart', cart);
  },
  // 商品的全选功能
  handleItemAllCheck() {
    // 获取data中的数据
    let {cart, allChecked} = this.data;
    // 修改值
    allChecked = !allChecked;
    // 循环修改cart数据中的商品选中状态
    cart.forEach(v=>v.checked=allChecked);
    // 把修改后的值 填充回缓存和data中
    this.setCart(cart);
  },
  // 商品数量的编辑功能
  async handleItemNumEdit(e) {
    // 获取传递过来的参数
    const {operation,id} = e.currentTarget.dataset;
    // 获取购物车数组
    let {cart} = this.data;
    // 找到需要修改的商品索引
    const index = cart.findIndex(v=>v.goods_id==id);
    // 判断是否要执行删除
    if(cart[index].num===1&&operation===-1) {
      // 弹窗提示
      const res = await showModel({content:"你是否要删除？"});
      if(res.confirm){
        cart.splice(index, 1);
        this.setCart(cart);
      }
    }else{
      // 进行修改数量
      cart[index].num+=operation;
      // 设置回缓存和data
      this.setCart(cart);
    }
  },
  // 点击结算
  async handlePay() {
    // 判断收货地址
    const {address,totalNum} = this.data;
    if(!address.userName){
      await showToast({title:'您还没有选择收货地址'});
      return;
    }
    // 判断用户有没有选购商品
    if(totalNum===0) {
      await showToast({title:'您还没有选购商品'});
      return;
    }
    // 跳转到支付页面
    wx.navigateTo({
      url: '/pages/pay/index',
    });
  }
})